package config

import (
	"encoding/json"
	"io"
	"log"
	"os"
)

type Config struct {
	Model      string     `json:"model"` //选择翻译模式
	YouDaoDict YouDaoDict `json:"youDaoDict"`
	OpenAI     AIConfig   `json:"openAI"`
}

type AIConfig struct {
	Url       string `json:"url"`
	ModelName string `json:"modelName"`
	ApiKey    string `json:"apiKey"`
	Prompt    string `json:"prompt"`
}

type YouDaoDict struct {
	AppID     string `json:"appID"`
	SecretKey string `json:"secretKey"`
}

// Conf 配置变量
var Conf = Config{
	YouDaoDict: YouDaoDict{},
	OpenAI:     AIConfig{},
}

func init() {
	//读取配置文件
	_, err := os.Stat("./config.json")
	if err != nil {
		SaveConfigFile()
		return
	}

	//文件存在，读取文件
	open, err := os.Open("./config.json")
	if err != nil {
		SaveConfigFile()
		log.Panicln("打开配置文件失败：", err.Error())
	}
	all, err := io.ReadAll(open)
	if err != nil {
		SaveConfigFile()
		log.Panicln("读取配置文件失败：", err.Error())
	}
	if err = json.Unmarshal(all, &Conf); err != nil {
		SaveConfigFile()
		log.Println("解析配置文件失败：", err.Error())
	}
}

// SaveConfigFile 配置文件
func SaveConfigFile() {
	//文件不存在，创建文件
	file, err := os.OpenFile("./config.json", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
	if err != nil {
		log.Panicln("创建配置文件失败：", err.Error())
	}
	defer file.Close()
	marshal, err := json.Marshal(&Conf)
	if err != nil {
		log.Panicln("序列化配置文件失败：", err.Error())
	}
	if _, err = file.Write(marshal); err != nil {
		log.Panicln(err.Error())
	}
}
